package model;

import java.awt.Point;

/**
 *
 * @author Carlos Henrique Silva Galdino
 * @author Raphael Pereira de Faria
 *
 */

public class Node implements Comparable {

    private Point coord;
    private int peso;
    private Node pai;
    private int custoComHeuristica;

    public Node() {
        this(new Point(-1, -1), 1);
    }

    public Node(Point coord, int peso) {
        this(coord, null, peso);
    }

    public Node(Point coord, Node pai, int peso) {
        this.coord = coord;
        this.pai = pai;
        this.peso = peso;
    }

    public Point getCoord() {
        return coord.getLocation();
    }

    public void setCoord(Point coord) {
        this.coord = coord;
    }

    public int getF_n() {
        return custoComHeuristica;
    }

    public void setF_n(int f_n) {
        this.custoComHeuristica = getCustoTotal() + f_n;
    }

    public int getCustoTotal() {
        return getCusto() + getPeso();
    }

    /*
     * Encontra o custo até o nó recursivamente, somando
     * o custo dos nós pais desde o nó inicial
     */
    public int getCusto() {
        if (getPai() != null)
           return getPai().getCusto() + getPai().getPeso();
        return 0;
    }

    public int getPeso() {
        return peso;
    }

    public void setPeso(int peso) {
        this.peso = peso;
    }

    public Node getPai() {
        return pai;
    }

    public void setPai(Node pai) {
        this.pai = pai;
    }

    public int compareTo(Object other) {
        Node noh = (Node) other;
        return this.getF_n() == noh.getF_n() ? 0 : (this.getF_n() > noh.getF_n() ? 1 : -1);
    }

    public boolean isObstaculo() {
        return this.getPeso() == Pesos.OBSTÁCULO.getPeso();
    }

    public boolean equals(Node noh) {
        return (this.getCoord().equals(noh.getCoord()));
    }

    @Override
    public String toString() {
        return "Nó (" + getCoord().x + "," + getCoord().y + ")" + " tem peso " + this.getPeso();
    }
    
}
